	//多线程处理超量数据
	public BatchAppendUserResult batchAppendUserOperate(final List<BatchAppendUserParam> param, final int currentUserId) throws InterruptedException, ExecutionException {
		logger.info("BatchAppendUserParam user, size:{}", param.size());
		/** 户籍类型 */
		final List<HouseholdType> findHouseholdType = configService.findHouseholdType();
		final Map<Integer, String> householdMap = new HashMap<>();
		for (HouseholdType hold: findHouseholdType) {
			householdMap.put(hold.getId(), hold.getName());
		}
		long firsTime  = System.currentTimeMillis();
		BatchAppendUserResult result = new BatchAppendUserResult();
		int size = param.size();
		/** 获取合适的线程数 */
		int nThreads = UnitConvertUtils.groupTime(sizeThreads, size);
		if(CollectionUtils.isNotEmpty(param)){
			/** 使用Java线程池操作 */
			ExecutorService executorService = Executors.newFixedThreadPool(nThreads);
			/** 线程处理结果 */
			List<Future<BatchAppendUserResult>> futures = new ArrayList<Future<BatchAppendUserResult>>(nThreads);
			try {
				for (int i = 0; i < nThreads; i++) {
					/** 按照线程对List进行分段 */
					final List<BatchAppendUserParam> subUserParam = param.subList(size / nThreads * i, size / nThreads * (i + 1));  
					logger.info("BatchAppendUser nThreads start to,n:{}", i);
					/** 创建线程回调 */
					final Callable<BatchAppendUserResult> task = new Callable<BatchAppendUserResult>() {
						@Override
						public BatchAppendUserResult call() throws Exception {
							/** 单个线程定义的结果集 */
							BatchAppendUserResult reaultThread = new BatchAppendUserResult();
							/** 错误记录 */
							List<BatchAppendUserParam> errorUserResult = new ArrayList<>();
							/** 最终业务检验、赋值、保存入库，记录错误数 */
							batchDealSaveUser(currentUserId, householdMap, subUserParam, reaultThread, errorUserResult);
							/** 将放回的信息赋值到结果集中 */
							reaultThread.setErrorUserResult(errorUserResult);
							return reaultThread;
						}
					};
					futures.add(executorService.submit(task));
				}
				int thread = 0;
				for (Future<BatchAppendUserResult> future : futures) {  
		            BatchAppendUserResult batchResult = future.get();
		            result.addResult(batchResult);
		            thread ++;
		            logger.info("A total of "+nThreads+" threads, Execution of "+thread+" threads and result:{}", batchResult.toString());
		        } 
			} finally {
				executorService.shutdown();
			}
		}
		long endTime = System.currentTimeMillis();
		/**
		 * 记录最终的结果和耗时
		 * */
        logger.info("Batch Append User And result:{}, time consuming:{}", result.toString(), (endTime-firsTime));
		return result;
	}